# python数据基础第八节：对字段进行抽取,字段拆分，记录抽取，
"""
    python数据基础第八节：
        1、对字段进行抽取:slice(起始索引，结束位置)
        2、字段拆分:split(sep(按什么分割),n(分成多少列)，expand=(True:返回DataFrame,False:返回Series))
        3、记录抽取，根据条件进行数据抽取:df[过滤条件]
            a、比较运算：>,<,=:例：df[df.comments>1000]
            b、范围运算，介于两者之间：between(左边界，右边界)例：df[df.comments.between(1000,10000)]
            c、空值匹配：df[pandas.isnull(匹配的那一列)]
            d、字符匹配：df[df.title.str.contains('匹配字段'，na=False(对空值的处理，一般忽略))]
            e、逻辑运算：（与（&）、或（|）、取反（not））多个过滤条件结合使用
        4、随机抽样：numpy.random.randint(start(范围的开始值),end(范围的结束值),number(抽样个数))，返回行数的索引值序列
        5、记录合并：将两个数据框中的数据合并成一个数据框，pandas.cancat([df1,df2,...])
        6、字段合并：直接将字段 用 + 拼接，只能是字符串
        7、字段匹配：累世sql中的子查询的一个操作，marge(x(第一个数据框),y（第二个数据框）,left_on（第一个数据框用来匹配的列）,right_on（第二个数据框用来匹配的列）)
"""
# 导出数据的模块在DataFrame模块下
import pandas
import numpy
from pandas import DataFrame, read_csv

df = read_csv("E:\\Python\\pyspark_demo01\\out_data\\out_data4.csv")

# 字段抽取函数slice(start,stop)
# 因为获取到的数据电话号当成字符串处理，所以应该先转为str
df["tel"] = df["tel"].astype(str)

# 运营商
bands = df["tel"].str.slice(0, 3)
print("地区:{}".format(bands))
# 地区
areas = df["tel"].str.slice(3, 7)
print("地区:{}".format(areas))
# 号码段
nums = df["tel"].str.slice(7, 11)
print("号码段:{}".format(nums))

# 字段拆分
df2 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data1.csv")
# split(sep(按什么分割),n(分成多少列)，expand=(True:返回DataFrame,False:返回Series))
new_df2 = df2["name"].str.split("|", 2, expand=True)
# 更爱生成的DataFrame的每个列名
new_df2.columns = ["订单编号", "价格", "名字"]
print("字段拆分:{}".format(new_df2))

# 商品抽取
df3 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data2.csv", sep="|")
# new_df3 = df3["name"].str.split("|",2,expand=True)
df3.columns = ["id", "comments", "name"]
# 商品价格大于10000的商品
tiaojian1 = df3[df3.comments > 10000]
print("商品价格大于10000的商品:{}".format(tiaojian1))
# 获取价格在1500到10000之间的商品
tiaojian2 = df3[df3.comments.between(1500, 10000)]
print("获取价格在1500到10000之间的商品:{}".format(tiaojian2))
# 查看标题有没有空值
tiaojian3 = df3[pandas.isnull(df3.title)]
print("查看标题有没有空值:{}".format(tiaojian3))
# 查看标题中有没有那个字段df[这里面会返回True,False]外面会返回对应的整行数据
tiaojian4 = df3[df3.title.str.contains("白色", na=False)]
print("模糊查询:{}".format(tiaojian4))
# 逻辑运算
tiaojian5 = df3[(df3.comments >= 1000) & (df3.comments <= 10000)]
print("逻辑运算:{}".format(tiaojian5))

# 随机取样
df4 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data3.csv")
# 随机取出来的值返回的是索引
r = numpy.random.randint(0, 10, 3)
# 查看返回的数据
random_data = df4.loc[r, :]
print("随机取样:{}".format(random_data))

# 多个表合并
df5 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data2.csv")
df6 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data5.csv")
df7 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data6.csv")
# 多个表合并
df8 = pandas.concat([df5, df6, df7])
print("多个表合并:{}".format(df8))

# 字段合并
df9 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\out_data5.csv", sep=" ", names=["bands", "area", "num"])
# 将所有字段转换为字符类型
df9 = df9.astype(str)
# 建多个字段进行合并
tel = df9["bands"] + df9["area"] + df9["num"]
print("字段合并:{}".format(tel))

# 字段匹配
df10 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data7.csv", sep="|", names=["id", "comments", "title"])
df11 = read_csv("E:\\Python\\pyspark_demo01\\out_data\\data8.csv", sep="|", names=["id", "oldPrice", "newPrice"])
itemprice = pandas.merge(df10,df11,left_on="id",right_on="id")